package ru.niir.goodfil.audit.client;

import ru.niir.goodfil.audit.domain.*;
import ru.niir.goodfil.audit.domain.enums.EnviromentSubsystem;

import java.util.Date;

public interface AuditService {
    //
    //  Безопасность
    //

    void logLoginAttempt(String ip, String login);

    void logLoginSuccess(String ip, String login);


    //
    //  Контроль окружения
    //

    void logEnviromentSubsystemLost(EnviromentSubsystem subsystem);

    void logEnviromentSubsystemFound(EnviromentSubsystem subsystem);


    //
    //  Ошибки в ИС
    //

    void logExceptionEvent(String ip, String login, String exception, String stacktrace);


    //
    //  Операци с сущностями
    //

    void logEntityCreate(String ip, String login, String klass, String orderXml);

    void logEntityUpdate(String ip, String login, String klass, String orderChangeXml);

    void logEntityDelete(String ip, String login, String klass, String orderXml);


    //getAuditService()
    //  Изменение настроек ИС
    //

    void logSettingModification(String ip, String login, String optionKey, String newOptionValue, String oldOptionValue);


    //
    //  Изменение пароля
    //

    void logPasswordChange(String ip, String login, String userLogin, String address);


    //
    //  Персональные цены
    //

    void logPersonalPriceCreation(String ip, String login, Long goodId, String goodCode, String goodName, Long clientId, String clientName, Float price, Date begdate, Date enddate);

    void logPersonalPriceDeletion(String ip, String login, Long goodId, String goodCode, String goodName, Long clientId, String clientName, Float price, Date begdate, Date enddate);


    //
    //  Пользователи
    //

    void logUserUIEvent(UserUIEvent userUIEvent);

    //
    //  Клиенты
    //

    void logClientUIEvent(ClientUIEvent clientUIEvent);

    void logClientC1NumChange(ClientC1NumChangeEvent event);

    void logClientDebtChanged(ClientDebtChangeEvent event);

    void logClientPriceColumnChange(ClientPriceColumnChangeEvent event);

    void logClientDeliveryInfoChange(ClientDeliveryInfoChangeEvent event);


    //
    //  Складские операции
    //

    void logOrderUIBuild(OrderUIBuildEvent event);

    //
    //  Замещения
    //

    void logReplacementUIEvent(ReplacementUIEvent event);


    //
    //  Товары
    //

    void logGoodUIEvent(GoodUIEvent event);

    //
    //  Заказы (на уровне UI)
    //

    void logOrderUIEvent(OrderUIEvent event);

    void logOrderItemUIEvent(OrderItemUIEvent event);
}